#传统方式的使用
import os

import dotenv
from langchain_classic.agents import AgentType, initialize_agent
from langchain_classic.memory import ConversationBufferMemory
from langchain_community.tools import TavilySearchResults
from langchain_core.tools import StructuredTool, Tool
from langchain_openai import ChatOpenAI

#使用Tavily搜索内容 ，注册地址https://app.tavily.com/


dotenv.load_dotenv()

#获取Tavily搜索工具实例
search = TavilySearchResults(max_results=5)   # max_results: 最多返回多少个结果

#获取一个搜索的工具
# 使用tool
search_tool = Tool(
    name="search_tavily",
    description="使用Tavily进行搜索互联网上的信息,并将结果返回给用户",
    func=search.run,
)

#获取大语言模型
chat_model = ChatOpenAI(
        model=os.getenv("MODEL_NAME")
        , base_url=os.getenv("BASE_URL")
        , api_key=os.getenv("API_KEY")
        , temperature=0.8  # 精确度
        , max_tokens=1024  # 回答长度
    )

#获取记忆实例 , 默认情况下，ConversationBufferMemory将返回一个消息列表，而不是一个字符串。 必须设置memory_key 为 chat_history因为提示词模板中使用的是chat_history。
memory = ConversationBufferMemory(return_messages= False , memory_key="chat_history")

#获取Agent实例
agent = AgentType.CONVERSATIONAL_REACT_DESCRIPTION #获取一个带记忆的实例

#获取AgentExecutor实例
agent_executor = initialize_agent(
    tools=[search_tool]
    , llm=chat_model
    , agent=agent
    , verbose=True #显示运行过程
    , memory=memory
)

#调用invoke()得到响应
response = agent_executor.invoke("今天的北京天气如何")
print(response)
response = agent_executor.invoke("我刚才问的是哪里的天气？")
print(response)